1. Field of the Invention
The present invention relates to message passing interfaces between a host and an I/O peripheral device. More specifically, the present invention relates to the dynamic reconfiguration of such a message passing interface.
2. Previous art
A host device often is required to communicate with I/O peripherals. As the demand for I/O throughput increases, so do the demands placed on the host device and the I/O peripherals. Increasing amounts of data must be transferred to and from the host and I/O peripheral, at ever increasing speeds. Various message passing protocols have been developed to facilitate communication between the host and the I/O peripheral, both to facilitate device driver portability across operating systems and to contribute to the development of intelligent, distributed I/O processing. By utilizing a standard message passing interface, device drivers can be designed independent of both the underlying bus architecture and the specific operating system used. Moreover, by imbuing the device driver with added intelligence and autonomy, the burden of the host processor or processors, memory and system bus in controlling interrupt driven I/O tasks can be lessened, thus freeing them for other tasks, such as application processing tasks. A message passing protocol can be thought of as intermediary separating the host and the I/O device which facilitates the exchange of data and control information. A specific implementation of such a message passing protocol includes one inbound and one outbound queue. In such an implementation, the I/O peripheral would provide one inbound and one outbound queue. The inbound logical queue receives all messages targeted for the I/O peripheral, whereas the outbound queue receives all messages processed by the I/O peripheral. Likewise, the host device would provide one inbound and one outbound logical queue. The inbound logical queue receives all messages targeted for the host, whereas the outbound logical queue receives all messages processed by the host. The inbound queue of the host is the outbound queue for the I/O peripheral. Likewise, the outbound queue of the host is the inbound queue of the I/O peripheral.
The host and the I/O peripheral include both local and shared memory. The shared memory of the host is mapped into the system address space, whereas the local memory of the host is accessible only to the host. The host shared memory is accessible both to the host, as well as to other devices, such as the I/O peripheral, having access to shared system memory. The I/O peripheral also includes local memory, accessible only to the I/O peripheral. The I/O peripheral also includes shared memory, which is also mapped into the system address space.
There is often a need to move data from a host system to a local memory of an I/O peripheral. For this purpose, two methods of moving data are known. These are the Push and Pull models of data movement.
The movement of data, in the Push model, is initiated by the host. In the Push model, the host moves data stored in its private local memory to the I/O peripheral's shared memory, which shared memory is mapped into the system address space. Thus, in the Push model, the host "pushes" data located in its private local memory to the I/O peripheral's shared memory. To do this, the I/O peripheral allocates message frames in its own shared memory, which shared memory is mapped into the shared system memory. The host then copies messages from the host local memory to those allocated message frames in the I/O processor shared memory.
Movement of data, in the Pull model, is initiated by the I/O peripheral. In the Pull model, the I/O peripheral moves data from the host's shared memory region, which shared memory is mapped into the system address space, to the I/O peripheral's own private local memory. Thus, in the Pull model, the I/O peripheral "pulls" data located in the host shared memory to its own local memory. To do this, the host allocates message frames in its shared memory, which shared memory is mapped into the shared system address space. The I/O peripheral then copies data from the shared system memory to its private local memory.
There are instances where the Push model of data transfer between the host and the peripheral is preferable, and more efficient. Such might be the case wherein the host processor architecture favors the Pull model or where there are relatively few I/O interrupts that are generated, or where the host requires continuous control over the processing of such interrupts. Other host processor architectures and other situations favor the Pull model, such as when a large number of vectored interrupts are generated, or when sustained data transfers occur between the host and the I/O peripheral. There are other situations still in which both the Push and the Pull model should be utilized consecutively, to make the most efficient use of system resources. In such situations, there has been a long felt need for a method of switching the message passing interface from the Push model of data transfer to the Pull model. Moreover, there has been a long felt need to dynamically reconfigure such a message passing interface from the Push model to the Pull model, without requiring the I/O processor, at first initialized in the Push model, to cycle through power-on/reset and to re-initialize in the Pull model.